package 多线程案例;
//单例模型
//懒汉模式
class SingletonLazy{
    private volatile static SingletonLazy singletonLazy= null;

    //创建的时机发生了改变，只有调用的时候才会创建
    public static SingletonLazy getSingleton(){
        if(singletonLazy == null) {
            //这样效率不高，第二次以及后面执行的时候一直要执行加锁和解锁操作，效率变低
            synchronized (SingletonLazy.class) {
                if (singletonLazy == null) {
                    //这里会涉及指令重排序的问题
                    singletonLazy = new SingletonLazy();
                }
            }
        }

        return singletonLazy;
    }
    private SingletonLazy(){ }
}
public class Demo_2 {
    public static void main(String[] args) {
        SingletonLazy singletonLazy1 = SingletonLazy.getSingleton();
        SingletonLazy singletonLazy2 = SingletonLazy.getSingleton();
        System.out.println(singletonLazy2==singletonLazy1);
    }
}
